package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.PO.*;
import com.itlong.cloud.POJO.VO.app.AppRepairDetailVO;
import com.itlong.cloud.POJO.VO.property.PropertyRepairGetOneVO;
import com.itlong.cloud.POJO.VO.property.PropertyRepairGetRepairsByPageVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      物业-报修管理数据库操作接口
 * <desc/>
 *
 * @createDate 2018/08/09
 */
@Mapper
@Repository
public interface IRepairProcessDao extends IAbstractBaseDao<RepairProcessPO> {

    /**
     * <desc>
     *       保存报修申请信息
     * </desc>
     *
     * @param params 保存的参数集
     * @return 保存的条数
     * @author wangzhi
     * @createDate 2018/08/09
     */
    Integer save(Map<String,Object> params);

    /**
     * <desc>
     *      获取楼栋id和单元id
     * </desc>
     *
     * @param roomId 房间id
     * @return 房间实体类
     * @author wangzhi
     * @createDate 2018/08/09
     */
    RoomInfoPO getBuildIdAndUnitId(@Param("roomId") String roomId);

    /**
     * <desc>
     *      获取当天已有的流水号
     * </desc>
     *
     * @param timeNum 当天的时间
     * @return 流水号集合
     * @author wangzhi
     * @createDate 2018/08/10
     */
    List<String> getRepairNums(@Param("timeNum") String timeNum);

    /**
     * <desc>
     *      获取我的物业报修数据
     * </desc>
     *
     * @param params 查询参数集
     * @return 结果集
     * @author wangzhi
     * @createDate 2018/08/10
     */
    List<RepairProcessPO> getRepairList(Map<String, Object> params);

    /**
     * <desc>
     *      获取我的报修详情
     * </desc>
     *
     * @param messageId 报修数据id
     * @return 报修管理实体对象
     * @author wangzhi
     * @createDate 2018/08/10
     */
    AppRepairDetailVO getRepairDetail(@Param("messageId") String messageId);

    /**
     * <desc>
     *      获取报修详情基本信息
     * </desc>
     *
     * @param messageId 报修数据id
     * @return 报修管理实体对象
     * @author wangzhi
     * @createDate 2018/08/13
     */
    RepairProcessPO getOneRepairInfo(@Param("messageId") String messageId, @Param("feeId") String feeId);

    /**
     * <desc>
     *      操作报修数据
     * </desc>
     *
     * @param map 修改的参数集
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2018/08/13
     */
    Integer repairManager(Map<String, Object> map);

    /**
     * <desc>
     *      根据用户id获取物业用户信息
     * </desc>
     *
     * @param servicemanUserId 用户id
     * @return 物业用户实体对象
     * @author wangzhi
     * @createDate 2018/08/13
     */
    PropertyUserInfoPO getUserNameAndPhoneNum(@Param("servicemanUserId") String servicemanUserId);

    /**
     * <desc>
     *      分页获取报修管理信息，包含待受理、已受理、已完成、已取消
     * </desc>
     *
     * @param params 查询条件集
     * @return 分页数据集合
     * @author wangzhi
     * @createDate 2018/08/14
     */
    List<PropertyRepairGetRepairsByPageVO> getRepairsByPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取报修管理信息总记录数，状态包含待受理、已受理、已完成、已取消
     * </desc>
     *
     * @param params 查询条件集
     * @return 总记录数
     * @author wangzhi
     * @createDate 2018/08/14
     */
    Integer getRepairsRecordCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取单个报修信息
     * </desc>
     *
     * @param repairId 报修id
     * @return 单个报修信息对象
     * @author wangzhi
     * @createDate 2018/08/14
     */
    PropertyRepairGetOneVO getOneRepair(@Param("repairId") String repairId);

    /**
     * <desc>
     *       删除账单
     * </desc>
     *
     * @param feeId 账单id
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2018/08/15
     */
    Integer deletePaymentBill(@Param("feeId") String feeId);

    /**
     * <desc>
     *      批量删除报修数据
     * </desc>
     *
     * @param repairIds 报修数据id集合
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2018/08/15
     */
    Integer batchDeleteByApp(List<String> repairIds);

    /**
     * <desc>
     *      获取,相连的姓名
     * </desc>
     *
     * @param servicemanUserIds 用户id集合
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2018/08/15
     */
    String getUserNameByIds(List<String> servicemanUserIds);

    /**
     * <desc>
     *      查询单个账单
     * </desc>
     *
     * @param feeId 账单id
     * @return 账单实体对象
     * @author wangzhi
     * @createDate 2018/08/15
     */
    PropertyPaymentBillPO getPaymentBill(@Param("feeId") String feeId);

    /**
     * <desc>
     *      依条件获取所有报修数据
     * </desc>
     *
     * @param params 查询参数
     * @return 所有报修数据
     * @author wangzhi
     * @createDate 2018/08/16
     */
    List<PropertyRepairGetRepairsByPageVO> getAllRepairs(Map<String, Object> params);

    /**
     * <desc>
     *      根据日期查询当前账单单号
     * </desc>
     *
     * @param date
     * @return
     * @author wangzhi
     * @createDate 2018/09/05
     */
    String getFeeNumberByDate(@Param("date")String date,@Param("projectId") String projectId);

    /**
     * <desc>
     *      查询用户信息
     * </desc>
     *
     * @param appUserId app用户id
     * @return 用户信息
     * @author wangzhi
     * @createDate 2018/09/06
     */
    AppUserInfoPO getAppUserInfo(@Param("appUserId") String appUserId);


    /**
     * <desc>
     *      批量删除报修数据
     * </desc>
     *
     * @param repairIdList 报修数据id集合
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2018/09/07
     */
    Integer batchDeleteByProperty(List<String> repairIdList);
}
